module ps2_dlc(
    input clk,              // 系统时钟
    input rst,              // 复位信号，低电平有效
    input ps2_clk,          // PS2时钟信号
    input ps2_data,         // PS2数据信号
    output reg [1:0] dir    // 方向输出：00-上，01-下，10-左，11-右
);

    wire [4:0] data;        // PS2模块输出数据
    wire up,left,right,down;
	assign data = {up,down,left,right};
    
    // 实例化PS2模块
    ps2 ps2_inst(
        .clk(clk),
        .rst(rst),
        .ps2_clk(ps2_clk),
        .ps2_data(ps2_data),
        .up(up),
        .down(down),
        .left(left),
        .right(right)
    );
    
    // 初始化
    initial begin
        dir <= 2'b11;  // 默认右方向
    end
    
    
    // 方向输出逻辑
    always @(posedge clk or negedge rst) begin
        if (!rst) begin
            dir <= 2'b11;  // 默认右方向
        end
        else begin
            // 优先级：上 > 下 > 左 > 右
            if (data == 4'b1000)       // 上键连续检测到两次
                dir <= 2'b00;
            else if (data == 4'b0100)  // 下键连续检测到两次
                dir <= 2'b01;
            else if (data == 2'b0010)  // 左键连续检测到两次
                dir <= 2'b10;
            else if (data == 2'b0001)  // 右键连续检测到两次
                dir <= 2'b11;
            // 如果没有按键按下，保持当前方向
        end
    end

endmodule